package com.wcs.exam.controller.admin.resp;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * Admin-考试-个人-分页-响应对象
 * </p>
 *
 * @author wcs
 * @since 2025-03-31
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(description = "Admin-考试-个人-分页-响应对象")
public class AdminExamDataPersonalPageResp implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Schema(description = "用户ID")
    private Long userId;

    @Schema(description = "考试ID")
    private Long examId;

    @Schema(description = "考试类型(1：模拟考试、2：正式考试)")
    private Integer examType;

    @Schema(description = "长期有效(false：否，true：是)")
    private Boolean longEffective;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "开始时间")
    private LocalDateTime beginTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "结束时间")
    private LocalDateTime endTime;

    @Schema(description = "报名方式(1：自主报名、2：后台操作)")
    private Integer registrationWay;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "报名时间")
    private LocalDateTime registrationTime;

    @Schema(description = "订单号(自主报名付费情况下不为空)")
    private String orderNo;

    @Schema(description = "考试记录ID")
    private Long examRecordId;

    @Schema(description = "用户得分(交卷后更新)")
    private BigDecimal userScore;

    @Schema(description = "考试成绩设置(1：记录学员最高成绩、2：记录学员最新成绩)")
    private Integer examScoreType;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "考试开考时间(模拟考试，考试结束后才更新)")
    private LocalDateTime examStartTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "考试结束时间(模拟考试，考试结束后才更新)")
    private LocalDateTime examEndTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "交卷时间(交卷后更新)")
    private LocalDateTime examSubmitTime;

    @Schema(description = "用户作答时间(单位：秒，交卷后更新)")
    private Integer userAnswerTime;

    @Schema(description = "考试状态(1:未考、2:考试中、3:考试完成、4:及格、5:不及格)")
    private Integer userExamStatus;

    @Schema(description = "评阅状态(1:未知、2:待阅卷、3:阅卷中、4:已阅卷)")
    private Integer userEvaluationStatus;

    @Schema(description = "正式考试-是否已提醒-开考前通知(false:否、true:是)")
    private Boolean beforeRemind;

    @Schema(description = "正式考试-是否已提醒-成绩公布通知(false:否、true:是)")
    private Boolean publishedScoreRemind;

    @Schema(description = "正式考试-考试开考前人脸识别错误次数")
    private Integer faceIdErrorCount;

    @Schema(description = "正式考试-人脸识别错误次数")
    private Integer faceCaptureErrorCount;

    @Schema(description = "正式考试-用户切屏次数")
    private Integer userSwitchScreenCount;

    @Schema(description = "用户最新得分")
    private BigDecimal userNewestScore;

    @Schema(description = "用户最高得分")
    private BigDecimal userHighestScore;

    @Schema(description = "状态")
    private Integer status;

    @Schema(description = "排序")
    private Integer sort;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "创建时间")
    private LocalDateTime gmtCreate;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @Schema(description = "修改时间")
    private LocalDateTime gmtModified;

    /*-------------------------------------------------- 拓展信息 --------------------------------------------------*/

    @Schema(description = "考试名称")
    private String examName;

    @Schema(description = "考试次数")
    private Long examCount;

    @Schema(description = "评阅方式(1:系统评阅，2:人工评阅)")
    private Integer evaluationMethod;

}
